package co.edu.javeriana.monopoly.clientemonopoly;

import java.rmi.Naming;
import java.rmi.RMISecurityManager;
import java.rmi.RemoteException;
import java.util.List;

import co.edu.javeriana.fw.comunicacion.AddressMachine;
import co.edu.javeriana.fw.comunicacion.IServicios;
import co.edu.javeriana.fw.comunicacion.Peer;
import co.edu.javeriana.monopoly.server.eventos.AdicionarJugador;
import co.edu.javeriana.monopoly.server.modelo.Jugada;
import co.edu.javeriana.monopoly.server.modelo.Jugador;
import co.edu.javeriana.monopoly.server.modelo.MonopolyException;

public class ClienteMonopoly extends Peer{
    
    public ClienteMonopoly() throws RemoteException {
        super();
    }
    private int port=2001;
    private String host="hades";
    private String ip="169.254.104.16";
    
    public static void main(String[] args){
        ClienteMonopoly cliente;

        try {
            cliente = new ClienteMonopoly();
            
            if (System.getSecurityManager() == null) {
                System.setSecurityManager(new RMISecurityManager());                        
            }
             String name = "//"+cliente.getHost()+":"+cliente.getPort()+"/IServicios";   
             try {
                Naming.rebind(name, cliente);
                System.out.println("bounded");
                //cliente.registrarse1();
                cliente.registrarse2();
            } catch (Exception e) {
                System.err.println("ComputeEngine exception: " +  e.getMessage());
                e.printStackTrace();
            }
            
        } catch (RemoteException e) {
            e.printStackTrace();
        }
    }
    
    public void registrarse2(){
        Jugada jugada = new Jugada();
        AdicionarJugador adicionarjugador = new AdicionarJugador(null);
        Jugador j = new Jugador();
        j.setNombre("Oscar Felipe Erazo");
        j.setId(1);
        jugada.setJugador(j);
        jugada.setRegla(adicionarjugador);
        AddressMachine m = new AddressMachine ();
        m.setNameMachine("hades");
        m.setIp("166.210.53.8");
        m.setPortToRecieveRMI(2002);
        j.setMachine(m);
        Object[] objects = new Object[]{j};
        adicionarjugador.setObjects(objects);
        enviarNotificacion(jugada);
    }
    
    public Object recibirEvento(Object jugada) throws RemoteException {
        try {
            return (Jugada)recibirEvento((Jugada)jugada);
        }catch (MonopolyException me) {
            me.printStackTrace();
            throw new RemoteException("",me);
        }
    }

    public Jugada recibirEvento(Jugada jugada) throws RemoteException, MonopolyException{
        return new Jugada();
    }

    public void setPort(int port) {
        this.port = port;
    }

    public int getPort() {
        return port;
    }

    public void setHost(String host) {
        this.host = host;
    }

    public String getHost() {
        return host;
    }

    public void setIp(String ip) {
        this.ip = ip;
    }

    public String getIp() {
        return ip;
    }

    public void enviarNotificacion(Object jugada, List jugadores) {
    }

    public void enviarNotificacion(Object jugada, Object jugador) {
    }

    public void enviarNotificacion(Object jugada) {
        enviarNotificacion((Jugada)jugada);
    }
    public void enviarNotificacion(Jugada jugada) {
        if (System.getSecurityManager() == null) {
            System.setSecurityManager(new RMISecurityManager());
        }
        try {
            String name = "rmi://localhost:2003/IServicios";
            IServicios servicio = (IServicios) Naming.lookup(name);
            servicio.recibirEvento(jugada);
            
            
        } catch (Exception e) {         
            System.err.println(" exception: " + e.getMessage());
            e.printStackTrace();
        }

    }
}
